home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / dev / m2 / menugadget.lha / MenuGadget.def next >
Text File  |  1993-01-29  |  6KB  |  134 lines

  1. DEFINITION MODULE MenuGadget;
  2.  
  3.    (* MenuGadget.def - Prozeduren zur Benutzung des neuen Menu-Gadget.
  4.     * Version  : 1.01 (29.01.93)
  5.     * Compiler : M2Amiga V4.107d
  6.     * Aufruf   : m2c -zyne+@
  7.     * Copyright: © 1993 by Fin Schuppenhauer
  8.     *
  9.     * Dieses Modul stellt zwei Prozeduren zur Erzeugung und Handhabung
  10.     * eines Menu-Gadgets zur Verfügung. Ein Menü-Gadget ist ein Button-
  11.     * Gadget, aus dem ein Menü hervorklappt, sobald es selektiert wurde.
  12.     * In diesem Menü kann nun mit dem Mauszeiger durch die Einträge
  13.     * gefahren werden. Ein Eintrag wird mit der linken Maustaste (also
  14.     * nicht die Menütaste wie von Intuition gewohnt!) ausgewählt.
  15.     * Wurde irgendwo außerhalb des Menüs geklickt, so wird der Wert
  16.     * ITEM_NOSELECTION zurückgegeben, sonst die Nummer des Eintrags (mit
  17.     * 0 beginned).
  18.     * Ein MenuGadget wird mit der Prozedur SetMenuGadget() erzeugt.
  19.     * Als Rückgabewert erhält man einen Zeiger auf ein (Button-)Gadget.
  20.     * Wurde dieses Gadget vom Anwender selektiert, ist die Prozedur
  21.     * HandleMenuGadget() aufzurufen. Sie erzeugt das Menü und überwacht
  22.     * den Selektionsvorgang und liefert schließlich die Nummer des ge-
  23.     * wählten Eintrags.
  24.     * Das beigefügte Beispielprogramm MenuGadgetDemo demonstriert die
  25.     * korrekte Verwendung der Prozeduren.
  26.     *
  27.     * Dieses Programm ist SHAREWARE. Wenn es Dir gefällt und Du es
  28.     * häufiger benutzt (bzw. die hier zur Verfügung gestellten Prozeduren
  29.     * in eigene Programme einbaust), dann sende bitte eine kleine
  30.     * Entschädigung (mindestens eine Postkarte) an die folgende Adresse:
  31.     *
  32.     *       Fin Schuppenhauer
  33.     *       Braußpark 10
  34.     *       2000 Hamburg 26
  35.     *
  36.     * Für Kritik, Fehlerberichte und Verbesserungsvorschläge danke ich
  37.     * im vorraus.
  38.     *
  39.     * Zu diesem Programm gehören folgende Dateien:
  40.     *
  41.     *    ° MenuGadget.def     (diese Datei)
  42.     *    ° MenuGadget.mod
  43.     *    ° MenuGadget.sym
  44.     *    ° MenuGadget.obj
  45.     *    ° MenuGadget.readme
  46.     *    ° MenuGadgetDemo.mod
  47.     *    ° MenuGadgetDemo
  48.     *
  49.     * Diese Dateien liegen entweder in dieser Form oder gepackt als
  50.     * MenuGadget.lzh-File vor.
  51.     *
  52.     * SIE DÜRFEN NICHT VERÄNDERT WERDEN (wenn nicht anderes erklärt wird)
  53.     * UND NUR KOMPLETT ÜBER ELEKTRONISCHEN WEGE ODER AUF PUBLIC DOMAIN
  54.     * DISK WEITERGEGEBEN WERDEN. IN BEIDEN FÄLLEN DARF DIE UNKOSTENPAU-
  55.     * SCHALE NICHT DM 5.- ÜBERSCHREITEN.
  56.     * FÜR DIE FUNKTIONSFÄHIGKEIT DER PROGRAMME SOWIE MÖGLICHE SCHÄDEN
  57.     * BEI DEREN BENUTZUNG WIRD KEINE GARANTIE ÜBERNOMMEN.
  58.     *
  59.     * Soft- und Hardware-Voraussetzungen:
  60.     *
  61.     *    ° Amiga xxxx mit mindst. OS2.04
  62.     *    ° Modula-2 Compiler M2Amiga mindst. V4.0
  63.     *
  64.     * Bekannte Fehler:
  65.     *    - keine
  66.     *
  67.     * Offene Wünsche:
  68.     *    - Gibt es die Möglichkeit, die Prozedur HandleMenuGadget() so
  69.     *      ins System einzubinden, daß sie automatisch bei der Betätigung
  70.     *      des Gadgets aufgerufen wird und praktisch eine eigene
  71.     *      IntuiMessage erzeugt, also ein wirklich neues Gadget darstellen
  72.     *      würde ?
  73.     *    - Wär doch ganz nett, wenn dieser Gadget-Typ in der nächsten
  74.     *      Betriebssystemversion vorhanden wäre, oder? Wie stehen die
  75.     *      Entwickler von Commodore-Amiga dazu?
  76.     *
  77.     * Wie kam es überhaupt zu diesem Programm ?
  78.     *    An der Uni arbeite ich viel auf SPARC-Workstations unter
  79.     *    OpenWindows. Eben dort werden diese "Gadget-Menüs" zu hauf
  80.     *    verwendet. Da ich das für ein gutes, bedienerfreundliches
  81.     *    Feature hielte, machte ich mich an die Implmentation auf dem
  82.     *    (doch besseren) Amiga.
  83.     *
  84.     *    "VER$ MenuGadget.def V1.0 (27.01.93)"
  85.     *)
  86.  
  87. (*---------------------------------------------------------------------------*)
  88.  
  89. IMPORT   id:IntuitionD,
  90.          gd:GadToolsD,
  91.          ud:UtilityD;
  92.  
  93. TYPE  StrPtr = POINTER TO ARRAY [0..127] OF CHAR;
  94.  
  95. CONST MENUGADGET_KIND = 42;
  96.  
  97. PROCEDURE SetMenuGadget (
  98.           kind     : LONGCARD;      (* Always use MENUGADGET_KIND *)
  99.       VAR previous : id.Gadget;
  100.       VAR ng       : gd.NewGadget;
  101.           taglist  : ud.TagItemPtr) : id.GadgetPtr;
  102.  
  103.    (* Diese Prozedur erzeugt das MenuGadget. Sie sieht nicht nur so
  104.     * ähnlich aus, wie CreateGadgetA() aus GadToolsL, sondern verhält
  105.     * sich auch ähnlich. Für die Verwendung der Parameter gilt das
  106.     * gleiche, wie für CreateGadgetA(). Intern wird dieser Aufruf in
  107.     * die Erzeugung eines genericKind-Gadgets umgewandelt und danach
  108.     * die notwendigen Ergänzungen hinzugefügt.
  109.     * Alle Einträge der NewGadget-Struktur haben die normale, gleiche
  110.     * Bedeutung, bis auf zwei Ausnahmen: Die Menge zur Plazierung eines
  111.     * möglicherweise vorhandenen Textes muß aus Kompatibilitätsgründen
  112.     * leer sein und userData ist ein Zeiger auf ein Array mit den
  113.     * StrPtr der Zeichenketten, die die Einträge des Menüs darstellen.
  114.     * Das Beispielprogramm MenuGadgetDemo demonstriert die Verwendung
  115.     * der Prozeduren.
  116.     *)
  117.  
  118. CONST ITEM_NOSELECTION = -42;    (* no item selected                  *)
  119.       ITEM_CREATIONERR = -2;     (* couldn't create menu              *)
  120.       ITEM_ERROR       = -3;     (* other error, not supported        *)
  121.  
  122. PROCEDURE HandleMenuGadget (
  123.          mg  : id.GadgetPtr;     (* must point to the menu-gadget     *)
  124.          win : id.WindowPtr)     (* on wich the menu-gadget is placed *)
  125.          : LONGINT;              (* number of the selected item       *)
  126.  
  127.    (* Wurde das MenuGadget selektiert, sollte diese Prozedur aufgerufen
  128.     * werden. Sie erzeugt das Menü und überwacht den Selektionsvorgang
  129.     * und liefert schließlich die Nummer des Eintrags (beginned bei 0)
  130.     * oder einen der oben definierten Codes.
  131.     *)
  132.  
  133. END MenuGadget.
  134.